標籤:版本控制
管理原始碼分支的模式
現代的原始碼控制系統提供了強大的工具,讓在原始碼中建立分支變得容易。但最終這些分支必須合併在一起,許多團隊花費了過多的時間來應對他們糾纏不清的分支叢林。有幾種模式可以讓團隊有效地使用分支,集中在整合多個開發人員的工作和組織通往生產版本的途徑。最重要的主題是分支應該頻繁整合,並專注於健康的幹線,可以毫不費力地部署到生產環境中。
Ship / Show / Ask
Ship/Show/Ask 是一種分支策略,結合了 Pull Request 的功能,並能夠持續發布變更。變更被分類為 Ship(合併到主線而無需審查)、Show(開啟一個 Pull Request 進行審查,但立即合併到主線)或 Ask(在合併前開啟一個 Pull Request 進行討論)。
抽象分支
「抽象分支」是一種以漸進的方式對軟體系統進行大規模變更的技術,讓你在變更仍在進行時定期發布系統。
持續交付
持續交付是一種軟體開發紀律,你以一種方式建構軟體,讓軟體可以在任何時間發布到生產環境中。
你在以下情況下進行持續交付
- 你的軟體在其整個生命週期中都可以部署
- 你的團隊優先考慮讓軟體可以部署,而不是開發新功能
- 任何人可以在有人對系統進行變更時,隨時獲得快速且自動化的生產準備狀況回饋
- 你可以根據需要,對軟體的任何版本進行按鈕部署到任何環境
差異偵錯
回歸錯誤是軟體中已存在一段時間的功能中新出現的錯誤。在追蹤時,通常有價值的是找出軟體中的哪個變更導致它們出現。查看該變更可以提供有關錯誤位置和如何消除錯誤的寶貴線索。對於這種調查形式沒有眾所周知的術語,但我稱之為差異偵錯。
功能分支
功能分支是一種原始碼分支模式,其中開發人員在開始開發新功能時會開啟一個分支。她會在此分支上完成所有功能工作,並在功能完成時與團隊其他成員整合變更。
基石介面
軟體開發團隊發現,如果他們能盡可能頻繁地整合工作,生活會容易得多。他們還發現頻繁發佈到生產環境很有價值。但團隊不希望向使用者公開半開發的功能。處理這種緊張局勢的一個有用技巧是建置所有後端程式碼、整合,但不要建置使用者介面。可以整合和測試功能,但會保留使用者介面直到最後,就像基石一樣,將其新增以完成功能,並向使用者揭示它。
Mercurial 壓縮提交
我最近用 Mercurial 壓縮了一些提交,所以想說如果有人也想這麼做,這篇文章值得一看。我不知道這是不是最好的程序,但對我來說似乎很有效。
更多版本控制
身為一個時常使用版本控制的人,我認為它可以擴展到更多電腦使用領域。除了軟體開發人員,很少電腦使用者使用版本控制。然而,正如軟體開發人員所知,版本控制是協作工作的絕佳機制,允許多人共同處理單一軟體系統。版本控制更廣泛使用的優點是什麼?
待處理標頭
我是 持續整合 的忠實粉絲,這是一個相對簡單的實務,可以對大多數開發團隊產生重大影響。然而,就像大多數實務一樣,它有其缺點^H^H^H^H^H 改進機會。主題相關的 即將成為標準書籍 作者 Paul Duvall 最近指出其中一項。如果提交建置中斷,整個團隊都會受到影響,並可能在修復之前減緩進度。
普遍版本化
Apple 最近宣布推出 Time Machine,這項功能可以回到過去,查看所有檔案變更,包括尋找已刪除的檔案。對我們這些狂熱的怪咖來說,這並不是什麼新功能。像其他人一樣,我將整個工作目錄置於版本控制之下,最初是 CVS,現在是 Subversion,因此我可以輕鬆查看我處理的所有變更。這是一個非常有用的功能,我以前曾想過擁有 MoreVersionControl 會是什麼樣子,而 Time Machine 可能就是朝這個方向邁出的一步。
語意衝突
聽過我和同事討論 FeatureBranch 的人知道我們不太喜歡這種模式。我們反對的一個重要部分是觀察到分支很容易,但合併很難。我們時常聽到的論點之一是,現代 VersionControlTools 使合併變得足夠容易,因此功能分支是值得的。
語意差異
大多數版本控制系統仰賴使用及了解版本間的變更,通常稱為 Unix 中可產生這些變更的指令的差異。良好的差異(及合併)演算法適用於文字和二進位檔案。這些差異的問題在於它們相當愚蠢。它們所做的只是查看兩個版本並產生從一個版本到另一個版本的簡單方法。
Subversion
Subversion 是開源版本控制系統,基本上是 CVS 的後繼版本。它修正了 CVS 中最大的問題,引入了原子提交和支援檔案及目錄重新命名等功能。我已使用它幾年,發現它非常穩定。
Vcs 調查
當我討論 VersionControlTools 時,我說這是一個不科學的意見彙整。在進行討論時,我意識到我可以透過進行調查,為我的分析加入一些虛假但令人著迷的數字。Google 的試算表讓執行調查的機制變得非常簡單,所以我無法抗拒。
版本控制工具
如果你花時間與軟體開發人員討論工具,我聽到的最大主題之一就是版本控制工具。一旦你開始使用版本控制工具,任何稱職的開發人員都會使用,它們就會成為你生活中很重要的一部分。版本工具不僅對於維護專案的歷史很重要,它們也是團隊協作的基礎。因此,我經常聽到有人抱怨版本控制工具很差,這不足為奇。在我們最近的 Thoughtworks 技術雷達 中,我們提出了兩項企業應評估使用的版本控制工具:Subversion 和分散式版本控制系統 (DVCS)。在這裡,我想進一步說明這一點,總結我們內部關於版本控制工具的許多討論。